package cn.iocoder.yudao.module.vlog.statistics.service;

import cn.iocoder.yudao.framework.business.basic.pojo.bo.DataComparison;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.SortablePageParam;
import cn.iocoder.yudao.module.vlog.statistics.dal.dataobject.VLogStatisticsDO;
import cn.iocoder.yudao.module.vlog.statistics.vo.VLogStatisticsReqVO;
import cn.iocoder.yudao.module.vlog.statistics.vo.VLogStatisticsRespVO;

import java.util.List;

/**
 * 视频统计 Service 实现类
 *
 * @author owen
 */
public interface VLogStatisticsService {

    /**
     * 增加视频发布数
     *
     * @param userId 博主用户编号
     */
    void increaseVLogCount(Long userId);

    /**
     * 减少视频发布数
     *
     * @param userId 博主用户编号
     */
    void decreaseVLogCount(Long userId);

    /**
     * 增加视频点赞数
     *
     * @param fromUserId 点赞者用户编号
     * @param toUserId   博主用户编号
     */
    void increaseLikeCount(Long fromUserId, Long toUserId);

    /**
     * 减少视频点赞数
     *
     * @param fromUserId 点赞者用户编号
     * @param toUserId   博主用户编号
     */
    void decreaseLikeCount(Long fromUserId, Long toUserId);

    /**
     * 增加视频收藏数
     *
     * @param fromUserId 收藏者用户编号
     * @param toUserId   博主用户编号
     */
    void increaseFavoriteCount(Long fromUserId, Long toUserId);

    /**
     * 减少视频收藏数
     *
     * @param fromUserId 收藏者用户编号
     * @param toUserId   博主用户编号
     */
    void decreaseFavoriteCount(Long fromUserId, Long toUserId);

    /**
     * 增加博主粉丝数
     *
     * @param fromUserId 关注者用户编号
     * @param toUserId   博主用户编号
     */
    void increaseFansCount(Long fromUserId, Long toUserId);

    /**
     * 减少博主粉丝数
     *
     * @param fromUserId 关注者用户编号
     * @param toUserId   博主用户编号
     */
    void decreaseFansCount(Long fromUserId, Long toUserId);

    /**
     * 获得视频统计（用户维度）
     *
     * @param userId 用户编号
     * @return 视频统计
     */
    VLogStatisticsDO getVLogStatistics(Long userId);

    /**
     * 获得视频统计排行榜分页（视频维度）
     *
     * @param reqVO     查询条件
     * @param pageParam 分页排序查询
     * @return 视频统计分页
     */
    PageResult<VLogStatisticsDO> getVLogStatisticsRankPage(VLogStatisticsReqVO reqVO, SortablePageParam pageParam);

    /**
     * 获得视频状况明细（视频维度）
     *
     * @param reqVO 查询条件
     * @return 统计数据对照
     */
    List<VLogStatisticsDO> getVLogStatisticsList(VLogStatisticsReqVO reqVO);

    /**
     * 获得视频状况统计分析（视频维度）
     *
     * @param reqVO 查询条件
     * @return 统计数据对照
     */
    DataComparison<VLogStatisticsRespVO> getVLogStatisticsAnalyse(VLogStatisticsReqVO reqVO);

}
